/**
 * 定义栈的数据结构，请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中，调用 min、push 及 pop 的时间复杂度都是 O(1)。
 */

// 直接遍历时间复杂度O(N),min借用辅助栈来实现达到O（1）的时间复杂度。

var MinStack = function() {
    this.stackA = []
    this.stackB = []
};


MinStack.prototype.push = function(x) {
    this.stackA.push(x)
    if (this.stackB.length == 0 || x <= this.stackB[this.stackB.length - 1]) {
        this.stackB.push(x)
    }
};


MinStack.prototype.pop = function() {
    if (this.stackA.pop() === this.stackB[this.stackB.length - 1]) {
        this.stackB.pop()
    }
};


MinStack.prototype.top = function() {
    return this.stackA[this.stackA.length - 1]
};


MinStack.prototype.min = function() {
    return this.stackB[this.stackB.length - 1]
};

let minStack = new MinStack();
minStack.push(0);
minStack.push(1);
minStack.push(0);
console.log(minStack.stackA, minStack.stackB)